import store from '@/store';
import { getQueryString, clearTicket } from '@/lib/tools';

async function getContext() {
    try {
        await getLatestVerCode();
    }catch(err) {
        console.log(err);
    }
}


// 品牌
const DEFAULT_BRAND = process.env.VUE_APP_BRAND;

// 获取品牌版本信息
function getLatestVerCode() {
    return new Promise((resolve, reject) => {
        G_transmit('getLatestVerCode', {
            queries: {
                brand: DEFAULT_BRAND
            }
        }).then(res => {
            let { data } = res;
            if(data && data.brandState === 1) {
                getLatestBrand(data.ver).then(result => {
                    store.dispatch('updateBrand', result);
                    store.dispatch('setSiteInfo', result)
                    resolve();
                }).catch(err => {
                    reject(new Error(err));
                });
            }
        }).catch(err => {
            console.log(err);
        });
    });
} 
    

// 获取最新品牌信息
function getLatestBrand(ver) {
    let brand = store.state.brand;
    return new Promise((resolve, reject) => {
        if(ver != brand.ver || !brand.publishBrand) {
            G_transmit('getLatestBrand', {
                queries: {
                    brand: DEFAULT_BRAND
                }
            }).then(res => {
                resolve(res.data);
            }).catch(err => {
                console.log('err = ', err)
            });
        } else {
            resolve(brand);
        }
    })
}

/**
 * 用ticket换取token
 * @param loginSuccess 登录成功的回调方法 注意方法一般只种token,一般不涉及到页面跳转
 * 注意：
 * 1.此方法走公共平台（cas.yanxiu.com）登录时才需要，走的登录页面的时候用不到
 * 2.如果是已有的项目，已有登录页面，对接的时候可以在原来的登录页面进行路由跳转，原来的登录页面相当于登录中转页，跳转前注意判断是否是登录状态，对接参考：ruiyun2-idx-web的登录页面
 * 3.如果是新的项目，可以考虑直接跳转cas.yanxiu.com平台，注意跳转的时候必须带上authUrl参数和apk参数，以确保登录成功有跳转路由，和根据apk获取登录配置
 * 4.不同的品牌比如培训、三人行、睿云登录页面有所差异，cas.yanxiu.com会根据query的apk参数获取登录配置，及显示不同的模板
 * 用法注意：
 * 1. 此方法用了三个方法，请注意是否定义getQueryString、queryToJson、clearTicket
 * 2. 全局定义ssoTicketToToken portal
 * 3. loginSuccess一定要传，换取token成功的回调，返回值是token
 * 4. 请求方法请根据项目自行调整比如睿云系列大多用G_transmit，培训项目有的用的proxyAction
 */
function getTokenByTicket (loginSuccess) {
    return new Promise((resolve,reject)=>{
        let ticket = getQueryString(window.location.href, 'ticket');
        if (!ticket) {
            resolve({});
            return
        }
        G_transmit("ssoTicketToToken", {
            message: false,
            queries: {
                ticket: ticket
            }
        }).then(res => {
            console.log(res.data, 'res.data');
            if (res.data) {
                loginSuccess && loginSuccess(res);
                // 无论获取成功或者失败，都需要清除一下query上的ticket参数，避免重复调用接口
                clearTicket();
            } else {
                clearTicket();
            }
            resolve(res)
        }).catch((err) => {
            clearTicket();
            console.log(err);
            reject(err)
        });
    })
}

export {
    getContext,
    getTokenByTicket
}
